//1.保存所有注册通知 (包含名字、要执行的函数，观察者) 
let notices = []
//2.注册通知到通知通知

// 注意
// @param {String} name 通知名称，不能冲突，建议写在全局文件中
// @param {Function} selector 通知对应要执行的函数，发生相应事件时执行
// @param {Object} observer 观察者，一般是page或者是component


function add(name,selector,observer){
	let notice = {
		name:name,
		selector:selector,
		observer:observer
	}
	notices.push(notice)
}
//3.移除通知（名字，观察者）

// 移除通知,当观察者对象销毁时使用
// @param {String} name 通知名称
// @param {Object} observer 注册的观察者


function remove(name,observer){
	for (let i = 0; i < notices.length; i++) {
		let onti= notices[i]
		if(onti.name == name && noti.observer ==observer){
			//删除元素
			notices.splice(i,1)
			//跳出循环
			return
		}
	}
}
//4.发送通知(名字，info：信息)

// 被观察者observer/subject发送通知
// @param {String} name 注册的通知名称
// @param {Object} info 发送的参数

function post(name,info){
	//全便利，相同名字的通知全发送
	for (let i = 0; i < notices.length; i++) {
		let onti= notices[i]
		if(onti.name == name){
			onti.selector(info)
		}
	}
}

module.exports = {
	add,
	remove,
	post
}
















